/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.Alineaciones;
import com.camachosanchez.bean.Baterias;
import com.camachosanchez.bean.ComprobacionBandaRodamientoPresion;
import com.camachosanchez.bean.ControlCambioNeumatico;
import com.camachosanchez.bean.DetalleAlineacion;
import com.camachosanchez.bean.DetalleControlCambioNeumatico;
import com.camachosanchez.bean.DetalleInspeccionEquipo;
import com.camachosanchez.bean.Egresos;
import com.camachosanchez.bean.InspeccionEquipo;
import com.camachosanchez.bean.MedicionComprobacion;
import com.camachosanchez.bean.Neumaticos;
import com.camachosanchez.bean.Pilotos;
import com.camachosanchez.bean.Usuarios;
import com.camachosanchez.bean.Vehiculos;
import com.camachosanchez.controler.jpa.AlineacionesJpaController;
import com.camachosanchez.controler.jpa.ComprobacionBandaRodamientoPresionJpaController;
import com.camachosanchez.controler.jpa.InspeccionEquipoJpaController;
import com.camachosanchez.controler.jpa.PilotosJpaController;
import com.camachosanchez.controler.jpa.exceptions.IllegalOrphanException;
import com.camachosanchez.controler.jpa.exceptions.NonexistentEntityException;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.ReportUtil;
import com.itextpdf.awt.PdfPrinterGraphics2D;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Color;
import java.awt.Desktop;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JEditorPane;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;
import javax.swing.event.InternalFrameEvent;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Rolando
 */
public class ImpresionReportes extends javax.swing.JInternalFrame {

    /**
     * Creates new form BusquedaEquipo
     */
    private String nombrePdf = "reportes/reporte.pdf";
    int inch = Toolkit.getDefaultToolkit().getScreenResolution();
    private float pixelToPoint = (float) 72 / (float) inch;
    private SimpleDateFormat formatoDeFecha;
    private SimpleDateFormat formatoFechaEnNombre;
    private int tipoReporte;
    private Alineaciones alineacion;
    private ComprobacionBandaRodamientoPresion medicion;
    private InspeccionEquipo inspeccion;

    public ImpresionReportes(int tipoReporte) {
        initComponents();
        formatoDeFecha = new SimpleDateFormat("dd/MM/yyyy");
        formatoFechaEnNombre = new SimpleDateFormat("dd-MM-yyyy");
        setFrameIcon(new ImageIcon(getClass().getResource("/com/camachosanchez/recursos/table.png")));
        txtReporte.setContentType("text/html");
        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        this.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() {
            @Override
            public void internalFrameClosing(InternalFrameEvent e) {
                cerrar();
            }
        });
        Usuarios user = Constantes.currentUser;
        if((tipoReporte == Constantes.REPORTE_ALINEACIONES || tipoReporte == Constantes.REPORTE_INSPECCIONES || tipoReporte == Constantes.REPORTE_MEDICIONES) && user.getRol() == Constantes.ROL_ADMINISTRADOR){
            btnAnular.setVisible(true);
            jSeparator1.setVisible(true);
        } else {
            btnAnular.setVisible(false);
            jSeparator1.setVisible(false);
        }
        this.tipoReporte = tipoReporte;
    }

    private void cerrar() {
        GUIUtil.maximizarTodasLasVentanas(this);
        if(tipoReporte == Constantes.REPORTE_EGRESO){
            
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlContenedor = new javax.swing.JPanel();
        scrReporte = new javax.swing.JScrollPane();
        txtReporte = new javax.swing.JEditorPane();
        toolBarPrincipal = new javax.swing.JToolBar();
        jLabel1 = new javax.swing.JLabel();
        btnImprimir = new javax.swing.JButton();
        jSeparator7 = new javax.swing.JToolBar.Separator();
        btnAnular = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JToolBar.Separator();
        btnCancelar = new javax.swing.JButton();

        setClosable(true);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);
        setTitle(".:: Reportes ::.");

        pnlContenedor.setLayout(new java.awt.BorderLayout());

        txtReporte.setEditable(false);
        scrReporte.setViewportView(txtReporte);

        pnlContenedor.add(scrReporte, java.awt.BorderLayout.CENTER);

        getContentPane().add(pnlContenedor, java.awt.BorderLayout.CENTER);

        toolBarPrincipal.setBackground(new java.awt.Color(255, 255, 255));
        toolBarPrincipal.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        toolBarPrincipal.setFloatable(false);
        toolBarPrincipal.setRollover(true);
        toolBarPrincipal.setPreferredSize(new java.awt.Dimension(593, 30));

        jLabel1.setText(" ");
        toolBarPrincipal.add(jLabel1);

        btnImprimir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/impresora.png"))); // NOI18N
        btnImprimir.setText("Imprimir");
        btnImprimir.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnImprimir.setFocusable(false);
        btnImprimir.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnImprimir.setOpaque(false);
        btnImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprimirActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnImprimir);
        toolBarPrincipal.add(jSeparator7);

        btnAnular.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_cancel.png"))); // NOI18N
        btnAnular.setText("Anular");
        btnAnular.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnAnular.setFocusable(false);
        btnAnular.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnAnular.setOpaque(false);
        btnAnular.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAnularActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnAnular);
        toolBarPrincipal.add(jSeparator1);

        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/16_delete.png"))); // NOI18N
        btnCancelar.setText("Cerrar");
        btnCancelar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnCancelar.setFocusable(false);
        btnCancelar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnCancelar.setOpaque(false);
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        toolBarPrincipal.add(btnCancelar);

        getContentPane().add(toolBarPrincipal, java.awt.BorderLayout.PAGE_START);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        cerrar();
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprimirActionPerformed
        // TODO add your handling code here:
        File pdfFile = ReportUtil.deHtmlAPdf(txtReporte.getText(), nombrePdf);
        if (Desktop.isDesktopSupported() && pdfFile != null) {
            try {
                Desktop.getDesktop().open(pdfFile);
            } catch (IOException ex) {
                Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            JOptionPane.showMessageDialog(null, "No se puede abrir el reporte.", "Error al abrir el archivo", JOptionPane.ERROR_MESSAGE);
        }
//        paintToPDF(txtReporte);
//        GUIUtil.abrirDialogoImpresion(ruta);
    }//GEN-LAST:event_btnImprimirActionPerformed

    private void btnAnularActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAnularActionPerformed
        // TODO add your handling code here:
        if (JOptionPane.showConfirmDialog(null, "¿Está seguro que desea anular el registro?", "Confirmación", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
            if(this.alineacion != null && this.tipoReporte == Constantes.REPORTE_ALINEACIONES) {
                AlineacionesJpaController dao = new AlineacionesJpaController(null);
                alineacion.setAnulado(true);
                try {
                    dao.edit(alineacion);
                    cerrar();
                } catch (IllegalOrphanException ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                } catch (NonexistentEntityException ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                } catch (Exception ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else if(this.inspeccion != null && this.tipoReporte == Constantes.REPORTE_INSPECCIONES) {
                InspeccionEquipoJpaController dao = new InspeccionEquipoJpaController(null);
                inspeccion.setAnulado(true);
                try {
                    dao.edit(inspeccion);
                    cerrar();
                } catch (IllegalOrphanException ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                } catch (NonexistentEntityException ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                } catch (Exception ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else if(this.medicion != null && this.tipoReporte == Constantes.REPORTE_MEDICIONES) {
                ComprobacionBandaRodamientoPresionJpaController dao = new ComprobacionBandaRodamientoPresionJpaController(null);
                medicion.setAnulado(true);
                try {
                    dao.edit(medicion);
                    cerrar();
                } catch (IllegalOrphanException ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                } catch (NonexistentEntityException ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                } catch (Exception ex) {
                    Logger.getLogger(ImpresionReportes.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        
    }//GEN-LAST:event_btnAnularActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAnular;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnImprimir;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JToolBar.Separator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator7;
    private javax.swing.JPanel pnlContenedor;
    private javax.swing.JScrollPane scrReporte;
    private javax.swing.JToolBar toolBarPrincipal;
    private javax.swing.JEditorPane txtReporte;
    // End of variables declaration//GEN-END:variables

    public void paintToPDF(JEditorPane txtHojaReporte) {
        try {
//            int anchoA4 = 2480;
//            int altoA4 = 3508;
            txtHojaReporte.setBounds(0, 0, (int) convertToPixels(612 - 58), (int) convertToPixels(792 - 60));
            Document document = new Document();
            FileOutputStream fos = new FileOutputStream("reportes/reporte.pdf");
            PdfWriter writer = PdfWriter.getInstance(document, fos);
            document.setPageSize(new com.itextpdf.text.Rectangle(612, 792));
            document.open();
            PdfContentByte cb = writer.getDirectContent();
            cb.saveState();
            cb.concatCTM(1, 0, 0, 1, 0, 0);

            PrinterJob job = PrinterJob.getPrinterJob();
            Graphics2D g2 = new PdfPrinterGraphics2D(cb, 612, 792, true, job);

            AffineTransform at = new AffineTransform();
            at.translate(convertToPixels(20), convertToPixels(20));
            at.scale(pixelToPoint, pixelToPoint);

            g2.transform(at);
            g2.setColor(Color.WHITE);
            g2.fill(txtHojaReporte.getBounds());

            Rectangle alloc = getVisibleEditorRect(txtHojaReporte);
            txtHojaReporte.getUI().getRootView(txtHojaReporte).paint(g2, alloc);

            g2.setColor(Color.BLACK);
            g2.draw(txtHojaReporte.getBounds());
            g2.dispose();
            cb.restoreState();
            document.close();
            fos.flush();
            fos.close();
//            File pdfFile = new File("reportes/reporte.pdf");
//            this.rutaActual = pdfFile.getAbsolutePath();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    protected Rectangle getVisibleEditorRect(JEditorPane ta) {
        Rectangle alloc = ta.getBounds();
        if ((alloc.width > 0) && (alloc.height > 0)) {
            alloc.x = alloc.y = 0;
            Insets insets = ta.getInsets();
            alloc.x += insets.left;
            alloc.y += insets.top;
            alloc.width -= insets.left + insets.right;
            alloc.height -= insets.top + insets.bottom;
            return alloc;
        }
        return null;
    }

    public float convertToPoints(int pixels) {
        return (float) (pixels * pixelToPoint);
    }

    public float convertToPixels(int points) {
        return (float) (points / pixelToPoint);
    }

    public void generarReporteAlineaciones(Alineaciones alineacion) {
        this.alineacion = alineacion;
        String fecha = formatoDeFecha.format(alineacion.getFecha());
        String fechaNombreReporte = formatoFechaEnNombre.format(alineacion.getFecha());
        String kmActual = alineacion.getIdVehiculos().getKmActual() + "";
        String kmMensual = alineacion.getIdVehiculos().getKmRecorridoMensual() + "";

        String reporte = "<html><head><content='text/html; charset=UTF-8'></head><body><table border='0' style='font-size: 11px;'><tr><td>"
                + "<table width='100%' style='font-size: 11px; border: 1px solid black; border-collapse: collapse;' border=1 width='100%' cellpadding='1' cellspacing='1'>"
                + "<tr><td colspan='6' style='text-align:center; background-color: #CCCCCC;'><b>ALINEACIÓN DE NEUMÁTICOS</b></td></tr>"
                + "<tr align='center'><th colspan='6' style='text-align:center; background-color: #CCCCCC;'><b>Información de la Unidad</b></th></tr>"
                + "<tr><td><b>NÚMERO DE PLACA:</b></td>"
                + "<td>" + alineacion.getIdVehiculos().getPlaca() + "</td>"
                + "<td><b>MARCA:</b></td>"
                + "<td>" + ((alineacion.getIdVehiculos().getIdMarca() != null) ? alineacion.getIdVehiculos().getIdMarca().getNombre() : "") + "</td>"
                + "<td><b>MODELO:</b></td>"
                + "<td>" + alineacion.getIdVehiculos().getIdTipoEje().getNombre() + "</td></tr>"
                + "<tr><td colspan='2' ><b>KILOMETRAJE ACTUAL:</b></td><td>" + kmActual + "</td>"
                + "<td colspan='2'><b>KILOMETRAJE MENSUAL:</b></td><td>" + kmMensual + "</td></tr>"
                + "</table></td></tr><tr><td>";
        reporte += "<table width='100%' style='font-size: 11px; border: 1px solid black; border-collapse: collapse;' border=1 width='100%' cellpadding='1' cellspacing='1'>"
                + "<tr><td><b>FECHA:</b></td>"
                + "<td>" + fecha + "</td>"
                + "<td><b>PILOTO:</b></td>"
                + "<td>" + alineacion.getIdPilotos().getApellidos() + " " + alineacion.getIdPilotos().getNombres() + "</td>"
                + "<td><b>KILOMETRAJE:</b></td>"
                + "<td>" + alineacion.getKmVehiculo() + "</td></tr>"
                + "</table></td></tr><tr><td>";

        reporte += "<table border=1 width='100%'>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>EJE</th><th style='text-align:center; background-color: #CCCCCC;'>TIPO</th><th style='text-align:center; background-color: #CCCCCC;'>ÁNGULO</th></tr>";
        List<DetalleAlineacion> detalle = alineacion.getDetalleAlineacionList();
        for (DetalleAlineacion item : detalle) {
            String eje = item.getIdFuncionEje().getNombre();
            String tipo = item.getIdTipoAngulo().getNombre();
            String angulo = "" + item.getAngulo();
            reporte += "<tr><td style='text-align:center;'>" + eje + "</td><td style='text-align:center;'>" + tipo + "</td>"
                    + "<td style='text-align:right;'>" + GUIUtil.formatearNumero(angulo) + "</td></tr>";
        }
        reporte += "</table><table border=1 width='100%'>"
                + "<tr><td colspan='2' style='text-align:right;'><b>Costo</b></td>"
                + "<td style='text-align:right;'>S/. " + GUIUtil.formatearNumero(alineacion.getCosto()) + "</td></tr>";
        reporte += "</table></td></tr></table></body></html>";

        nombrePdf = "reportes/AlineacionVehiculo" + alineacion.getIdVehiculos().getPlaca() + "_" + fechaNombreReporte + ".pdf";
        txtReporte.setText(reporte);
    }

    public void generarReporteInspecciones(InspeccionEquipo inspeccion) {
        this.inspeccion = inspeccion;
        String fechaNombreReporte = formatoFechaEnNombre.format(inspeccion.getFechaHoraSalida());
        String fechaSalida = formatoDeFecha.format(inspeccion.getFechaHoraSalida());
        String fechaEntrada = formatoDeFecha.format(inspeccion.getFechaHoraEntrada());
        String reporte =
                "<html><head><content='text/html; charset=UTF-8'></head><body><table border='0' style='font-size: 11px;'><tr><td>"
                + "<table width='100%' style='font-size: 11px; border: 1px solid black; border-collapse: collapse;' border=1 width='100%' cellpadding='1' cellspacing='1'>"
                + "<tr><td colspan='4' style='text-align:center; background-color: #CCCCCC;'><b>INSPECCIÓN DE SALIDA Y ENTRADA DE VEHÍCULO</b></td></tr>"
                + "<tr><th colspan='2' style='text-align:center; background-color: #CCCCCC;'><b>SALIDA</b></th>"
                + "<th colspan='2' style='text-align:center; background-color: #CCCCCC;'><b>ENTRADA</b></th></tr>"
                + "<tr><td><b>VEHÍCULO/PLACA:</b></td>"
                + "<td>" + inspeccion.getIdVehiculoSalida().getPlaca() + "</td>"
                + "<td><b>VEHÍCULO/PLACA:</b></td>"
                + "<td>" + inspeccion.getIdVehiculoEntrada().getPlaca() + "</td></tr>"
                + "<tr><td><b>FECHA/HORA:</b></td>"
                + "<td>" + fechaSalida + "</td>"
                + "<td><b>FECHA/HORA:</b></td>"
                + "<td>" + fechaEntrada + "</td></tr>"
                + "<tr><td><b>CLIENTE:</b></td>"
                + "<td>" + inspeccion.getClienteSalida() + "</td>"
                + "<td><b>CLIENTE:</b></td>"
                + "<td>" + inspeccion.getClienteEntrada() + "</td></tr>"
                + "<tr><td><b>TRANSPORTISTA:</b></td>"
                + "<td>" + inspeccion.getTransportistaSalida() + "</td>"
                + "<td><b>TRANSPORTISTA:</b></td>"
                + "<td>" + inspeccion.getTransportistaEntrada() + "</td></tr>"
                + "<tr><td><b>PILOTO:</b></td>"
                + "<td>" + inspeccion.getIdPilotoSalida().getNombres() + " " + inspeccion.getIdPilotoSalida().getApellidos() + "</td>"
                + "<td><b>PILOTO:</b></td>"
                + "<td>" + inspeccion.getIdPilotoEntrada().getNombres() + " " + inspeccion.getIdPilotoEntrada().getApellidos() + "</td></tr>"
                + "<tr><td><b>LICENCIA:</b></td>"
                + "<td>" + inspeccion.getIdPilotoSalida().getTipoLicencia() + "</td>"
                + "<td><b>LICENCIA:</b></td>"
                + "<td>" + inspeccion.getIdPilotoEntrada().getTipoLicencia() + "</td></tr>"
                + "</table></td></tr><tr><td>";

        reporte += "<table border=1 width='100%'><tr>"
                + "<th colspan='3' style='text-align:center; background-color: #CCCCCC;'>NEUMÁTICOS DE SALIDA</th><th colspan='4' style='text-align:center; background-color: #CCCCCC;'>NEUMÁTICOS DE ENTRADA</th></tr>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>POSICIÓN</th><th style='text-align:center; background-color: #CCCCCC;'>CÓDIGO</th><th style='text-align:center; background-color: #CCCCCC;'>OBSERVACIÓN</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>*</th><th style='text-align:center; background-color: #CCCCCC;'>POSICIÓN</th><th style='text-align:center; background-color: #CCCCCC;'>CÓDIGO</th><th style='text-align:center; background-color: #CCCCCC;'>OBSERVACIÓN</th></tr>";
        List<DetalleInspeccionEquipo> detalle = inspeccion.getDetalleInspeccionEquipoList();
        Collections.sort(detalle);
        int tam = detalle.size();
        for (int i = 0; i < tam; i = i + 2) {
            DetalleInspeccionEquipo detalleSalida = detalle.get(i);
            DetalleInspeccionEquipo detalleEntrada = detalle.get(i + 1);
            int posicionS = detalleSalida.getPosicion();
            String strPosicionS = (posicionS > 0) ? "" + posicionS : "R";
            String codigoNeumaticoS = "" + detalleSalida.getIdNeumatico().getCodigo();
            String observacionS = detalleSalida.getObservacion();
            int posicionE = detalleEntrada.getPosicion();
            String strPosicionE = (posicionE > 0) ? "" + posicionE : "R";
            String codigoNeumaticoE = "" + detalleEntrada.getIdNeumatico().getCodigo();
            String observacionE = detalleEntrada.getObservacion();
            String estado = detalleEntrada.getEstado() ? "√" : "";
            reporte += "<tr><td style='text-align:center;'>" + strPosicionS + "</td><td style='text-align:center;'>" + codigoNeumaticoS + "</td>"
                    + "<td>" + observacionS + "</td><td style='text-align:center;'>" + estado + "</td><td style='text-align:center;'>" + strPosicionE + "</td><td style='text-align:center;'>" + codigoNeumaticoE
                    + "</td><td>" + observacionE + "</td></tr>";
        }

        reporte += "</table></td></tr><tr><td><table width='100%'>"
                + "<tr>"
                + "<th colspan='4'>Condiciones Generales</th></tr>"
                + "<tr><td>Operable (" + (inspeccion.getOperable() ? "Si" : "No") + ")</td>"
                + "<td>Requiere Mantenimiento (" + (inspeccion.getReqMantenimiento() ? "Si" : "No") + ")</td>"
                + "<td>Requiere Preparación (" + (inspeccion.getReqPreparacion() ? "Si" : "No") + ")</td>"
                + "<td>Dañado (" + (inspeccion.getDaniado() ? "Si" : "No") + ")</b></td></tr>";
        reporte += "</table></td></tr></table></body></html>";

        nombrePdf = "reportes/InspeccionVehiculo" + inspeccion.getIdVehiculoSalida().getPlaca() + "_" + fechaNombreReporte + ".pdf";
        txtReporte.setText(reporte);
    }

    public void generarReporteBandaRodamiento(ComprobacionBandaRodamientoPresion medicion) {
        this.medicion = medicion;
        String fecha = formatoDeFecha.format(medicion.getFechaEjecucion());
        String sgteFecha = formatoDeFecha.format(medicion.getFechaSgteReporte());
        String fechaNombreReporte = formatoFechaEnNombre.format(medicion.getFechaEjecucion());
        String reporte =
                "<html><table border='0' style='font-size: 11px;'><tr><td>"
                + "<table style='font-size: 11px; border: 1px solid black; border-collapse: collapse;' border=1 width='100%' cellpadding='3' cellspacing='3'><tr>"
                + "<td colspan='6' style='text-align:center; background-color: #CCCCCC;'><b>CONTROL DE PRESIÓN Y BANDA DE RODAMIENTO</b></td></tr>"
                + "<td ><b>NÚMERO DE PLACA:</b></td>"
                + "<td>" + medicion.getIdVehiculo().getPlaca() + "</td>"
                + "<td><b>KILOMETRAJE:</b></td>"
                + "<td>" + GUIUtil.formatearNumero(medicion.getKilometraje()) + "</td>"
                + "<td><b>TALLER/PATIO:</b></td>"
                + "<td>" + medicion.getIdTaller().getNombre() + "</td></tr>"
                + "<tr><td><b>FECHA DE EJECUCIÓN</b></td><td>" + fecha + "</td>"
                + "<td colspan='2'><b>SIGUIENTE CONTROL:</b></td><td colspan='2'>" + sgteFecha + "</td></tr>"
                + "</table></td></tr><tr><td>";
        reporte += "<table style='font-size: 11px; border: 1px solid black; border-collapse: collapse;' border=1 width='100%' cellpadding='3' cellspacing='3'><tr>"
                + "<th colspan='6' style='text-align:center; background-color: #CCCCCC;'></th><th colspan='3' style='text-align:center; background-color: #CCCCCC;'>ALTURA</th><th colspan='2' style='text-align:center; background-color: #CCCCCC;'></th></tr>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>POSICIÓN</th><th style='text-align:center; background-color: #CCCCCC;'>CÓDIGO</th><th style='text-align:center; background-color: #CCCCCC;'>MARCA</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>BANDA</th><th style='text-align:center; background-color: #CCCCCC;'>R</th><th style='text-align:center; background-color: #CCCCCC;'>PRESIÓN (Lb)</th><th style='text-align:center; background-color: #CCCCCC;'>AFUERA</th><th style='text-align:center; background-color: #CCCCCC;'>CENTRO</th><th style='text-align:center; background-color: #CCCCCC;'>ADENTRO</th><th style='text-align:center; background-color: #CCCCCC;'>ESTADO</th><th style='text-align:center; background-color: #CCCCCC;'>RECOMENDACIONES</th></tr>";
        List<MedicionComprobacion> detalle = medicion.getMedicionComprobacionList();
        Collections.sort(detalle);
        for (MedicionComprobacion detalleMedicion : detalle) {
            int posicion = detalleMedicion.getPosicion();
            String strPosicion = (posicion > 0) ? "" + posicion : "R";
            String codigoNeumatico = "" + detalleMedicion.getIdNeumatico().getCodigo();
            String marca = detalleMedicion.getIdNeumatico().getIdMarca().getNombre();
            String banda = detalleMedicion.getIdNeumatico().getIdModelo().getMedida();
            String R = detalleMedicion.getIdNeumatico().getNumRenovaciones() + "";
            String presion = GUIUtil.formatearNumero(detalleMedicion.getPresion());
            String alturaAfuera = GUIUtil.formatearNumero(detalleMedicion.getAlturaIzquierda());
            String alturaCentro = GUIUtil.formatearNumero(detalleMedicion.getAlturaCentro());
            String alturaAdentro = GUIUtil.formatearNumero(detalleMedicion.getAlturaDerecha());
            String estado = detalleMedicion.getIdEstado().getNombre();
            String recomendacion = (detalleMedicion.getComentario() == null) ? "" : detalleMedicion.getComentario();
            reporte += "<tr><td style='text-align:center;'>" + strPosicion + "</td><td style='text-align:center;'>" + codigoNeumatico + "</td>"
                    + "<td style='text-align:center;'>" + marca + "</td><td style='text-align:center;'>" + banda + "</td><td style='text-align:center;'>" + R + "</td><td style='text-align:right;'>" + presion + "</td><td style='text-align:right;'>" + alturaAfuera + "</td>"
                    + "<td align='right'>" + alturaCentro + "</td><td align='right'>" + alturaAdentro + "</td><td style='text-align:left;'>" + estado + "</td><td style='text-align:left;'>" + recomendacion + "</td></tr>";
        }
        reporte += "</table></td></tr><tr></td><table style='font-size: 11px; border: 1px solid black; border-collapse: collapse;' border=1 width='100%' cellpadding='3' cellspacing='3'><tr><td><b>OBSERVACIONES:</b></td>"
                + "<td colspan='9'>" + medicion.getObservaciones() + "</td></tr>";
        reporte += "</table></td></tr></table></html>";

        nombrePdf = "reportes/MedicionVehiculo" + medicion.getIdVehiculo().getPlaca() + "_" + fechaNombreReporte + ".pdf";
        txtReporte.setText(reporte);
    }

    public void generarReporteControlCambio(ControlCambioNeumatico montaje) {
        String fecha = formatoDeFecha.format(montaje.getFecha());
        String fechaNombreReporte = formatoFechaEnNombre.format(montaje.getFecha());
        String reporte =
                "<html><table border='0' style='font-size: 11px;'><tr><td>"
                + "<table style='font-size: 11px; border: 1px solid black; border-collapse: collapse;' border=1 width='100%' cellpadding='3' cellspacing='3'>"
                + "<tr><td colspan='8' style='text-align:center; background-color: #CCCCCC;'><b>MONTAJE Y DESMONTAJE DE NEUMÁTICOS</b></td></tr><tr>"
                + "<td><b>VEHÍCULO:</b></td>"
                + "<td>" + montaje.getIdVehiculo().getPlaca() + "</td>"
                + "<td><b>CÓDIGO:</b></td>"
                + "<td>" + montaje.getIdVehiculo().getCodBarras() + "</td>"
                + "<td><b>KILOMETRAJE:</b></td>"
                + "<td>" + GUIUtil.formatearNumero(montaje.getKilometraie()) + "</td>"
                + "<td><b>FECHA:</b></td>"
                + "<td>" + fecha + "</td></tr>"
                + "<tr><td><b>TALLER:</b></td><td colspan='7'>" + montaje.getIdTaller().getNombre() + "</td></tr>"
                + "<tr><td><b>PILOTO:</b></td><td colspan='7'>" + montaje.getIdPiloto().getNombres() + " " + montaje.getIdPiloto().getApellidos() + "</td></tr>"
                + "<tr><td><b>COMENTARIO:</b></td><td colspan='7'>" + montaje.getComentario() + "</td></tr>"
                + "</table></td></tr>";
        reporte += "<tr><td><table width='100%' style='font-size: 11px; border: 1px solid black;' border=1 cellpadding='1' cellspacing='1' align='center'>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>NEUMÁTICO</th><th style='text-align:center; background-color: #CCCCCC;'>POSICIÓN</th><th style='text-align:center; background-color: #CCCCCC;'>ACCIÓN</th></tr>";
        List<DetalleControlCambioNeumatico> detalle = montaje.getDetalleControlCambioNeumaticoList();
        Collections.sort(detalle);
        boolean colorFondo = false;
        for (DetalleControlCambioNeumatico detalleControlCambioNeumatico : detalle) {
            colorFondo = !colorFondo;
            String codigoNeumatico = "" + detalleControlCambioNeumatico.getIdNeumatico().getCodigo();
            int posicion = detalleControlCambioNeumatico.getPosicion();
            String strPosicion;
            switch (posicion) {
                case -1:
                case 0:
                    strPosicion = "R";
                    break;
                default:
                    strPosicion = "" + posicion;
                    break;
            }
            int accion = detalleControlCambioNeumatico.getTipo();
            String strAccion = "";
            switch (accion) {
                case -1:
                    strAccion = "DESMONTAJE";
                    break;
                case 1:
                    strAccion = "MONTAJE";
                    break;
            }
            if (colorFondo) {
                reporte += "<tr><td style='text-align:center; background-color: #EEEEEE;'>" + codigoNeumatico + "</td><td style='text-align:center; background-color: #EEEEEE;'>" + strPosicion + "</td><td style='text-align:center; background-color: #EEEEEE;'>" + strAccion + "</td></tr>";
            } else {
                reporte += "<tr><td style='text-align:center;'>" + codigoNeumatico + "</td><td style='text-align:center;'>" + strPosicion + "</td><td style='text-align:center;'>" + strAccion + "</td></tr>";
            }
        }
        reporte += "</table></td></tr></html>";

        nombrePdf = "reportes/MontajeVehiculo" + montaje.getIdVehiculo().getPlaca() + "_" + fechaNombreReporte + ".pdf";
        txtReporte.setText(reporte);
    }

    public void generarReporteHistorialNeumatico(DefaultTableModel modeloReencuaches, DefaultTableModel modeloCambios, Neumaticos neumatico) {
        String reporte =
                "<html><table><tr><td>"
                + "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1' align='center'><tr><td colspan='6' style='text-align:center; background-color: #CCCCCC;'><b>HISTORIAL DE MOVIMIENTOS DE NEUMÁTICO</b></td><tr>"
                + "<td><b>CÓDIGO:</b></td>"
                + "<td>" + neumatico.getCodigo() + "</td>"
                + "<td><b>MARCA:</b></td>"
                + "<td>" + neumatico.getIdMarca().getNombre() + "</td>"
                + "<td><b>BANDA</b></td>"
                + "<td>" + neumatico.getIdModelo().getMedida() + "</td></tr>"
                + "</table></td></tr><tr><td>";
        reporte += "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1' align='center'><tr>"
                + "<th colspan='7' style='text-align:center; background-color: #CCCCCC;'><b>"
                + "MONTAJES/DESMONTAJES</b></th></tr>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>FECHA</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>VEHÍCULO</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>TALLER</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>KILOMETRAJE:</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>TIPO</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>POS</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>OBSERVACIÓN</th></tr>";
        int cantCambios = modeloCambios.getRowCount();
        String fecha, vehiculo, taller, kilometraje, tipo, posicion, observacion;
        for (int i = 0; i < cantCambios; i++) {
            fecha = (modeloCambios.getValueAt(i, 1) == null) ? "" : modeloCambios.getValueAt(i, 1) + "";
            vehiculo = (modeloCambios.getValueAt(i, 2) == null) ? "" : modeloCambios.getValueAt(i, 2) + "";
            taller = (modeloCambios.getValueAt(i, 3) == null) ? "" : modeloCambios.getValueAt(i, 3) + "";
            kilometraje = (modeloCambios.getValueAt(i, 4) == null) ? "" : modeloCambios.getValueAt(i, 4) + "";
            tipo = (modeloCambios.getValueAt(i, 5) == null) ? "" : modeloCambios.getValueAt(i, 5) + "";
            posicion = (modeloCambios.getValueAt(i, 6) == null) ? "" : modeloCambios.getValueAt(i, 6) + "";
            observacion = (modeloCambios.getValueAt(i, 7) == null) ? "" : modeloCambios.getValueAt(i, 7) + "";
            reporte += "<tr><td style='text-align:center;'>" + fecha + "</td><td style='text-align:center;'>" + vehiculo + "</td>"
                    + "<td style='text-align:left;'>" + taller + "</td><td style='text-align:right;'>" + kilometraje + "</td><td style='text-align:center;'>" + tipo + "</td><td style='text-align:center;'>" + posicion + "</td>"
                    + "<td style='text-align:left;'>" + observacion + "</td></tr>";
        }
        reporte += "</table></td></tr><tr><td>";
        reporte += "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1'><tr>"
                + "<th colspan='10' style='text-align:center; background-color: #CCCCCC;'>ENVÍOS A REENCAUCHE</th></tr>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>FECHA ENVÍO</th><th style='text-align:center; background-color: #CCCCCC;'>DISTRIBUIDOR</th><th style='text-align:center; background-color: #CCCCCC;'>N° FACTURA</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>FECHA RECEPCIÓN</th><th style='text-align:center; background-color: #CCCCCC;'>NUEVO MODELO</th><th style='text-align:center; background-color: #CCCCCC;'>NUEVO PISO</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>GUÍA DE REMISIÓN</th><th style='text-align:center; background-color: #CCCCCC;'>PRECIO</th><th style='text-align:center; background-color: #CCCCCC;'>GARANTÍA</th><th style='text-align:center; background-color: #CCCCCC;'>OBSERVACIONES</th></tr>";

        int cantReencauches = modeloReencuaches.getRowCount();
        String fechaEnvio, distribuidor, factura, fechaRec, nuevoModelo, nuevoPiso, guiRem, precio, garantia, obs;
        for (int i = 0; i < cantReencauches; i++) {
            fechaEnvio = (modeloReencuaches.getValueAt(i, 1) == null) ? "" : modeloReencuaches.getValueAt(i, 1) + "";
            distribuidor = (modeloReencuaches.getValueAt(i, 2) == null) ? "" : modeloReencuaches.getValueAt(i, 2) + "";
            factura = (modeloReencuaches.getValueAt(i, 3) == null) ? "" : modeloReencuaches.getValueAt(i, 3) + "";
            fechaRec = (modeloReencuaches.getValueAt(i, 4) == null) ? "" : modeloReencuaches.getValueAt(i, 4) + "";
            nuevoModelo = (modeloReencuaches.getValueAt(i, 5) == null) ? "" : modeloReencuaches.getValueAt(i, 5) + "";
            nuevoPiso = (modeloReencuaches.getValueAt(i, 6) == null) ? "" : modeloReencuaches.getValueAt(i, 6) + "";
            guiRem = (modeloReencuaches.getValueAt(i, 7) == null) ? "" : modeloReencuaches.getValueAt(i, 7) + "";
            precio = (modeloReencuaches.getValueAt(i, 8) == null) ? "" : modeloReencuaches.getValueAt(i, 8) + "";
            garantia = (modeloReencuaches.getValueAt(i, 9) == "") ? "" : "Si";
            obs = (modeloReencuaches.getValueAt(i, 10) == null) ? "" : modeloReencuaches.getValueAt(i, 10) + "";
            reporte += "<tr style='text-align:center;'><td>" + fechaEnvio + "</td><td style='text-align:center;'>" + distribuidor + "</td>"
                    + "<td style='text-align:right;'>" + factura + "</td><td style='text-align:center;'>" + fechaRec + "</td><td style='text-align:center;'>" + nuevoModelo + "</td><td style='text-align:center;'>" + nuevoPiso + "</td><td style='text-align:center;'>" + guiRem + "</td>"
                    + "<td style='text-align:right;'>" + precio + "</td><td style='text-align:center;'>" + garantia + "</td><td style='text-align:left;'>" + obs + "</td></tr>";
        }
        reporte += "</table></td></tr></html>";

        nombrePdf = "reportes/HistorialNeumatico" + neumatico.getCodigo() + ".pdf";
        txtReporte.setText(reporte);
    }

    public void generarReporteInformacionUnidad(Vehiculos vehiculo, List<DetalleControlCambioNeumatico> cambio) {
        String piloto = "";
        if(!cambio.isEmpty()){
            PilotosJpaController dao = new PilotosJpaController(null);
            Pilotos p = dao.findPilotos(Integer.parseInt(cambio.get(0).getObservacion()));
            piloto = p.getApellidos() + " " + p.getNombres();
        }
        String reporte =
                "<html><table><tr><td>"
                + "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1' align='center'>"
                + "<tr><td colspan='6' style='text-align:center; background-color: #CCCCCC;'><b>INFORMACIÓN DE UNIDAD</b></td><tr>"
                + "<td><b>PLACA:</b></td>"
                + "<td>" + ((vehiculo.getPlaca() == null) ? "" : vehiculo.getPlaca()) + "</td>"
                + "<td><b>CODIGO:</b></td>"
                + "<td>" + ((vehiculo.getCodBarras() == null) ? "" : vehiculo.getCodBarras()) + "</td>"
                + "<td><b>MARCA:</b></td>"
                + "<td>" + ((vehiculo.getIdMarca() == null) ? "" : vehiculo.getIdMarca().getNombre()) + "</td></tr>"
                + "<tr><td><b>SERIE CHASIS:</b></td>"
                + "<td>" + ((vehiculo.getSerieChasis() == null) ? "" : vehiculo.getSerieChasis()) + "</td>"
                + "<td><b>NRO. MOTOR:</b></td>"
                + "<td>" + ((vehiculo.getNumeroMotor()) == null ? "" : vehiculo.getNumeroMotor()) + "</td>"
                + "<td><b>TIPO:</b></td>"
                + "<td>" + ((vehiculo.getIdTipo() == null) ? "" : vehiculo.getIdTipo().getNombre()) + "</td></tr>"
                + "<tr><td><b>TANQUE (L):</b></td>"
                + "<td>" + ((vehiculo.getCapacidadTanque() == null) ? "" : vehiculo.getCapacidadTanque()) + "</td>"
                + "<td><b>FECHA COMPRA:</b></td>"
                + "<td>" + ((vehiculo.getFechaCompra() == null) ? "" : formatoDeFecha.format(vehiculo.getFechaCompra())) + "</td>"
                + "<td><b>DISTRIBUIDOR:</b></td>"
                + "<td>" + ((vehiculo.getIdDistribuidor() == null) ? "" : vehiculo.getIdDistribuidor().getNombre()) + "</td></tr>"
                + "<tr><td><b>PILOTO:</b></td>"
                + "<td>" + piloto + "</td>"
                + "<td><b>PATIO:</b></td>"
                + "<td>" + ((vehiculo.getIdFlotilla() == null) ? "" : vehiculo.getIdFlotilla().getNombre()) + "</td>"
                + "<td><b>EJES:</b></td>"
                + "<td>" + ((vehiculo.getIdTipoEje() == null) ? "" : vehiculo.getIdTipoEje().getNombre()) + "</td></tr>"
                + "<tr><td><b>CARGA (Kg):</b></td>"
                + "<td>" + ((vehiculo.getMaximaCapacidadCargaPeso() == null) ? "" : vehiculo.getMaximaCapacidadCargaPeso()) + "</td>"
                + "<td><b>CARGA (m³):</b></td>"
                + "<td>" + ((vehiculo.getMaximaCapacidadCargaVolumen() == null) ? "" : vehiculo.getMaximaCapacidadCargaVolumen()) + "</td>"
                + "<td><b>FECHA REGISTRO:</b></td>"
                + "<td>" + ((vehiculo.getFechaRegistro() == null) ? "" : formatoDeFecha.format(vehiculo.getFechaRegistro())) + "</td></tr>"
                + "</table></td></tr><tr><td>";

        reporte += "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1'><tr>"
                + "<th colspan='7' style='text-align:center; background-color: #CCCCCC;'>NEUMÁTICOS</th></tr>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>POSICIÓN</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>CÓDIGO</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>SERIE</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>MARCA</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>MEDIDA</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>TIPO PISO</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>R</th></tr>";

        for (DetalleControlCambioNeumatico temp : cambio) {
            if (temp.getTipo() >= 0) {
                String posicion = (temp.getPosicion() <= 0 ? "R" : temp.getPosicion() + "");
                String codigo = temp.getIdNeumatico().getCodigo();
                String serie = (temp.getIdNeumatico().getNumSerie() == null) ? "" : temp.getIdNeumatico().getNumSerie();
                String marca = (temp.getIdNeumatico().getIdMarca() == null ? "" : temp.getIdNeumatico().getIdMarca().getNombre());
                String medida = (temp.getIdNeumatico().getIdModelo() == null ? "" : temp.getIdNeumatico().getIdModelo().getMedida());
                String tipoPiso = (temp.getIdNeumatico().getTipoPiso() == null ? "" : temp.getIdNeumatico().getTipoPiso().getNombre());
                int num = temp.getIdNeumatico().getNumRenovaciones();
                reporte += "<tr style='text-align:center;'><td style='text-align:center;'>" + posicion + "</td>"
                        + "<td style='text-align:center;'>" + codigo + "</td>"
                        + "<td style='text-align:center;'>" + serie + "</td>"
                        + "<td style='text-align:center;'>" + marca + "</td>"
                        + "<td style='text-align:center;'>" + medida + "</td>"
                        + "<td style='text-align:center;'>" + tipoPiso + "</td>"
                        + "<td style='text-align:center;'>" + num + "</td></tr>";
            }
        }
        reporte += "</table></td></tr></html>";
        nombrePdf = "reportes/InformacionUnidad_" + vehiculo.getCodBarras() + ".pdf";
        txtReporte.setText(reporte);
    }
    
    public void generarReporteEgreso(Egresos egreso) {
        String fecha = formatoDeFecha.format(egreso.getFecha());
        String fechaNombre = formatoFechaEnNombre.format(egreso.getFecha());
        String reporte =
                "<html><table><tr><td>"
                + "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1' align='center'>"
                + "<tr><td colspan='2' style='text-align:center; background-color: #CCCCCC;'><b>REGISTRO DE EGRESOS</b></td></tr>"
                + "<tr><td><b>FECHA:</b></td>"
                + "<td>" + fecha + "</td></tr>"
                + "<tr><td><b>PILOTO:</b></td>"
                + "<td>" + egreso.getIdPilotos().getApellidos() + " " + egreso.getIdPilotos().getNombres() + "</td></tr>"
                + "<tr><td><b>UNIDAD:</b></td>"
                + "<td>" + egreso.getIdVehiculos().getPlaca() + "</td></tr>"
                + "<tr><td><b>MONTO:</b></td>"
                + "<td>" + egreso.getMonto() + "</td></tr>"
                + "<tr><td colspan='2'><b>CONCEPTO:</b></td></tr>"
                + "<tr><td colspan='2'>" + egreso.getConcepto() + "</td></tr>";
        
        reporte += "</table></td></tr></table></html>";
        nombrePdf = "reportes/Egresos_" + egreso.getIdVehiculos().getPlaca() + "_" + fechaNombre + ".pdf";
        txtReporte.setText(reporte);
    }
    
    public void generarReporteHistorialBateria(DefaultTableModel modeloCambios, Baterias bateria) {
        String reporte =
                "<html><table><tr><td>"
                + "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1' align='center'><tr><td colspan='6' style='text-align:center; background-color: #CCCCCC;'><b>HISTORIAL DE MOVIMIENTOS DE NEUMÁTICO</b></td><tr>"
                + "<td><b>CÓDIGO:</b></td>"
                + "<td>" + bateria.getCodigo() + "</td>"
                + "<td><b>MARCA:</b></td>"
                + "<td>" + bateria.getIdMarca().getNombre() + "</td>"
                + "<td><b>N° DE PLACAS</b></td>"
                + "<td>" + bateria.getNroPlacas() + "</td></tr>"
                + "</table></td></tr><tr><td>";
        reporte += "<table border=1 width='100%' style='font-size: 11px; border: 1px solid black;' cellpadding='1' cellspacing='1' align='center'><tr>"
                + "<th colspan='6' style='text-align:center; background-color: #CCCCCC;'><b>MONTAJES/DESMONTAJES</b></th></tr>"
                + "<tr><th style='text-align:center; background-color: #CCCCCC;'>FECHA</th><th style='text-align:center; background-color: #CCCCCC;'>VEHÍCULO</th><th style='text-align:center; background-color: #CCCCCC;'>TALLER</th>"
                + "<th style='text-align:center; background-color: #CCCCCC;'>KILOMETRAJE:</th><th style='text-align:center; background-color: #CCCCCC;'>TIPO</th><th style='text-align:center; background-color: #CCCCCC;'>POS</th></tr>";
        int cantCambios = modeloCambios.getRowCount();
        String fecha, vehiculo, taller, kilometraje, tipo, posicion;
        for (int i = 0; i < cantCambios; i++) {
            fecha = (modeloCambios.getValueAt(i, 1) == null) ? "" : modeloCambios.getValueAt(i, 1) + "";
            vehiculo = (modeloCambios.getValueAt(i, 2) == null) ? "" : modeloCambios.getValueAt(i, 2) + "";
            taller = (modeloCambios.getValueAt(i, 3) == null) ? "" : modeloCambios.getValueAt(i, 3) + "";
            kilometraje = (modeloCambios.getValueAt(i, 4) == null) ? "" : modeloCambios.getValueAt(i, 4) + "";
            tipo = (modeloCambios.getValueAt(i, 5) == null) ? "" : modeloCambios.getValueAt(i, 5) + "";
            posicion = (modeloCambios.getValueAt(i, 6) == null) ? "" : modeloCambios.getValueAt(i, 6) + "";
            reporte += "<tr><td style='text-align:center;'>" + fecha + "</td><td style='text-align:center;'>" + vehiculo + "</td>"
                    + "<td style='text-align:left;'>" + taller + "</td><td style='text-align:right;'>" + kilometraje + "</td>"
                    + "<td style='text-align:center;'>" + tipo + "</td><td style='text-align:center;'>" + posicion + "</td></tr>";
        }
        reporte += "</table></td></tr><tr><td>";

        nombrePdf = "reportes/HistorialBateria" + bateria.getCodigo() + ".pdf";
        txtReporte.setText(reporte);
    }
}
